{
 "cells": [
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Crossover"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_sbx:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Simulated Binary Crossover ('real_sbx', 'int_sbx')\n",
    "\n",
    "Details about the crossover can be found in <cite data-cite=\"sbx\"></cite>. Real values can be represented by a binary notation and then a the point crossovers can be performed. SBX simulated this operation by using a probability distribution *simulating* the binary crossover.\n",
    "\n",
    "A crossover object can be created by "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pymoo.factory import get_crossover\n",
    "\n",
    "crossover = get_crossover(\"real_sbx\", prob=0.9, eta=20)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As arguments the probability of a crossover and the *eta* parameter can be provided.\n",
    "\n",
    "In the example below we demonstrate a crossover in an optimization problem with only one variable. A crossover is performed between two points, *0.2* and *0.8*, and the resulting exponential distribution is visualized. Depending on the *eta_cross* the exponential distribution can be fine tuned.\n",
    "\n",
    "The probability of SBX follows an exponential distribution. Please note for demonstration purpose, we have set *prob_per_variable=1.0* which means every variable participates in the crossover (necessary because here exists only one variable). However, it is suggested to perform a crossover of two variables form each parent with a probability of *0.5* which is defined by default if not defined otherwise."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 248,
       "width": 372
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.interface import crossover\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def show(eta_cross):\n",
    "    a,b = np.full((5000, 1), 0.2), np.full((5000, 1), 0.8)\n",
    "    off = crossover(get_crossover(\"real_sbx\", prob=1.0, eta=eta_cross, prob_per_variable=1.0), a, b)\n",
    "\n",
    "    plt.hist(off, range=(0,1), bins=200, density=True, color=\"red\")\n",
    "    plt.show()\n",
    "\n",
    "show(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 248,
       "width": 378
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "show(30)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Also, it can be used for integer variables. The bounds are slightly modified and after doing the crossover the variables are rounded."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 252,
       "width": 378
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.factory import get_crossover\n",
    "from pymoo.interface import crossover\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def show(eta_cross):\n",
    "    a,b = np.full((50000, 1), -10), np.full((50000, 1), +10)\n",
    "    off = crossover(get_crossover(\"int_sbx\", prob=1.0, eta=eta_cross, prob_per_variable=1.0), a, b, xl=-20, xu=+20)\n",
    "    val, count = np.unique(off, return_counts=True)\n",
    "    #print(np.column_stack([val, count / count.sum()]))\n",
    "    plt.hist(off, range=(-20, 20), bins=41, density=True, color=\"red\")\n",
    "    plt.show()\n",
    "\n",
    "show(3)"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_point:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Point Crossover ('real_point', 'bin_point', 'int_point' )\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The point crossover is mostly applied to binary optimization problems. But in general in can be used for other variable representations. \n",
    "\n",
    "The point crossover can be initiated by"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "crossover = get_crossover(\"real_k_point\", n_points=2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For any number of points that are desired. Additionally, for the purpose of convenience the \n",
    "single- or two point crossover are created by"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pymoo.operators.crossover.point_crossover.PointCrossover at 0x1244c8490>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "get_crossover(\"real_one_point\")\n",
    "get_crossover(\"real_two_point\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "directly. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "One Point Crossover\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Two Point Crossover\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "K Point Crossover (k=4)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhIAAAIRCAYAAAAfqVQRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dedwkVXno8d8jGECUARXUgAmIYYnovQKCgmyS4I4iYDA3Koq4RFEUxV2JUeOSCIqJ3qCCWy4qBJeIioqAiEsEjNsIIqCyiTA6iDAs8tw/ql5pmu55e85b3V3V/ft+Pv2p6Vq6Tp8+3e8z5zx1KjITSZKkEneZdgEkSVJ3GUhIkqRiBhKSJKmYgYQkSSpmICFJkooZSEiSpGIGEpIkqZiBhCRJKmYgIUmSihlISJKkYgYSkiSpmIGEJEkqZiAhSZKKGUhIkqRicxNIRMRmEfGhiLgiIm6KiEsj4piI2GjaZZMkqasiM6ddhrGLiC2Bc4BNgM8APwF2AvYCLgB2zcxrp1dCSZK6aV56JP6NKoh4cWY+OTNflZmPAo4GtgbeMtXSSZLUUTPfI1H3RlwEXApsmZm39Wy7B3AlEMAmmfn7qRRSkqSOWnvaBZiAverlab1BBEBm/i4ivgHsAzwc+OqavnhEXAJsQBWoSJLURZsD12XmFmt64DwEElvXywuHbP8pVSCxFQWBBLDBeuutd89tt932niWFmxXnnXdeI6+z/fbbN/I60iBNtVOpVFt/45YvX86NN95YdOw8BBLL6uXKIdsX1m+4uheJiHOHbFp322235dxzh22eDxHRyOvMez1qvJpqp1Kptv7G7bDDDpx33nmXlhw7L8mWkiRpDOahR2Khx2HZkO0L63+7uhfJzB0Gra97KtrZVyVJ0pjNQyBxQb3casj2v6iXw3IoNII2X/1jd7ZmRde/Z20uv8rNw9DG1+rlPhFxh/dbX/65K3AD8K1JF0ySpK6b+UAiM38GnEZ1acsL+zb/A7A+8FHnkJAkac3Nw9AGwN9TTZH9nojYG1gO7Ew1x8SFwGunWDZJkjpr5nsk4I+9EjsCJ1AFEEcAWwLvBh7ufTYkSSozLz0SZOYvgWdNuxxdZcLi9Jigpi4YpZ2O43fE78f0zUWPhCRJGg8DCUmSVMxAQpIkFZubHIl5ZW5DGcddpeZ16Xs1qd/OLtXJMPZISJKkYgYSkiSpmIGEJEkqZo7EjJvU+Nus5WLM2vuZV+No/7aN+TALuQuTYo+EJEkqZiAhSZKKGUhIkqRiBhKSJKmYyZZqxDwmJs1D0t08fq6aHttbN9kjIUmSihlISJKkYgYSkiSpmDkSc2YexvWnpanx3TZ9Rm0qi2af7a3StVwReyQkSVIxAwlJklTMQEKSJBUzR2LOdG3sTe1me9KkTSqPwrY9OnskJElSMQMJSZJUzEBCkiQVM5CQJEnFTLaUWsYkL2k4vx/tY4+EJEkqZiAhSZKKGUhIkqRi5khoJPN2Mx3HYTUrmvju+n3Q6tgjIUmSihlISJKkYgYSkiSpmDkSGoljpCo1zfyaxdrtvOX+lBpXPfm7MhvskZAkScUMJCRJUjEDCUmSVMxAQpIkFTPZssNMFFMXtSnBrk1l0eTMw2/nJNu2PRKSJKmYgYQkSSpmICFJkoqZI9FhTY2BzcN44Th0bXy9LZ9zU+XoWv2rPWw7zbJHQpIkFTOQkCRJxQwkJElSMQMJSZJUzGRLmXg0wCgJgW1JXpxXJfU/rbZuW6n4WzOb7JGQJEnFDCQkSVIxAwlJklTMHAlpAMdy55f5DJMz63U9L78j9khIkqRiBhKSJKmYgYQkSSpmjoRmfpxS5WZtjHeUtj5r77nNrOvZYI+EJEkqZiAhSZKKGUhIkqRiBhKSJKmYyZYzxsTJ0SyW5GU9Vma9Hkz2k5bOHglJklTMQEKSJBUzkJAkScXMkZgxjvk2w3qcX4vlhYzSNmY9t0TNmYXfGnskJElSMQMJSZJUzEBCkiQVM0dCmiDHzruvTZ9hm8fXm6qnNr9HVeyRkCRJxQwkJElSMQMJSZJUrFOBRETcKyKeExGnRMRFEXFjRKyMiLMj4pCIGPh+ImKXiDg1IlbUx3w/Ig6PiLUm/R4kSZolXUu2PBB4H3Al8DXgF8B9gKcAHwAeGxEHZk92TkQ8CTgZWAV8AlgBPBE4Gti1fk1pLCaVmGdCmkZV0iZL2pdtcn50LZC4ENgX+Hxm3rawMiJeA3wH2J8qqDi5Xr8BcBzwB2DPzPxuvf71wOnAARFxUGaeONF3IUnSjOjU0EZmnp6Zn+sNIur1VwHvr5/u2bPpAGBj4MSFIKLefxXwuvrpC8ZXYkmSZlunAolF3FIvb+1Z96h6+cUB+58F3ADsEhHrjLNgkiTNqq4NbQwUEWsDz6if9gYNW9fLC/uPycxbI+IS4EHAA4DlYy2k5lLJOHHJGPYoxzhmbc4KtLts6qaZCCSAtwHbAadm5pd61i+rlyuHHLewfsPFThAR5w7ZtM1IJZQkaQZ1fmgjIl4MHAH8BHj6lIsjSdJc6XSPRES8CHg38GNg78xc0bfLQo/DMgZbWP/bxc6VmTsMKcO5wPaLl1aSpNnT2UAiIg6nmgvih1RBxNUDdrsA2BHYCrjD0ESdV7EFVXLmxeMt7Xi06eZBXdPmceI2l21SxjXXgXUrNa+TQxsR8UqqIOJ7wF5Dggio5ooAeMyAbbsDdwPOycybmi+lJEmzr3OBRD2Z1Nuoehj2zsxrVrP7ScA1wEERsWPPa6wLvLl++r5xlVWSpFnXqaGNiHgm8CaqmSq/Drx4QBfopZl5AkBmXhcRh1IFFGdExIlUU2TvS3Vp6ElU02ZLkqQCnQokqHIaANYCDh+yz5nACQtPMvPTEbEH8FqqKbTXBS4CXga8Jx00lSSpWKcCicw8Cjiq4LhvAI9rujzTZgykWWXblrqjczkSkiSpPQwkJElSMQMJSZJUrFM5ErPEyaTKNDV23qX6N19AUpvZIyFJkooZSEiSpGIGEpIkqZg5ElPiuPd0Wf+S1Ax7JCRJUjEDCUmSVMxAQpIkFTOQkCRJxUy2lDS3SiYm63qibpcmYxuXrn+GbWOPhCRJKmYgIUmSihlISJKkYuZISJpbjpWXm7W6m1TuyKzVG9gjIUmSlsBAQpIkFTOQkCRJxcyRkFrG6/znQ9fHysfRTqdZJ13/PKbJHglJklTMQEKSJBUzkJAkScUMJCRJUjGTLaWWMelrPplk2646aOJ72NT7aftvgj0SkiSpmIGEJEkqZiAhSZKKmSMxIW0a+1tM28fjpFnk925yvEFXs+yRkCRJxQwkJElSMQMJSZJUzByJCVlsrKxNORRtKssouj4O2bX6njddb1+6Mz/TZtkjIUmSihlISJKkYgYSkiSpmIGEJEkqZrJlS5j8M7/87CV1mT0SkiSpmIGEJEkqZiAhSZKKmSOhThk0eZM5BlKz5nGSNH9HytkjIUmSihlISJKkYgYSkiSpmIGEJEkqZrKlOsWEKDWp60mFk/o++L3T6tgjIUmSihlISJKkYgYSkiSpmDkS6vw4sZoxyji4baVdJvV5lJzHvIr5YY+EJEkqZiAhSZKKGUhIkqRi5kio82OZjts3Yxbrsettu1+XPqMulbUps9beRmWPhCRJKmYgIUmSihlISJKkYgYSkiSpmMmWmpp5TMZqk3lNDOuycXxm8/g9tO03yx4JSZJUzEBCkiQVM5CQJEnFzJHQ1DhOqVHN4jj+Yu1/Ft/ztPhbM172SEiSpGIGEpIkqZiBhCRJKmaOhKTWa2qMu015B20qy2LalGNQUm9dquumTPIzm1iPRERsFBHrT+p8kiRp/BoNJCJi74h4R0Rs1LNuk4g4E7gGWBER72rynJIkaXqa7pE4DHhKZv6mZ90/A7sBPwOuBV4SEU9t+LySJGkKmg4k/hdw9sKTiFgPOAD4cmZuBWwN/BJ4flMnjIi/i4isH88Zss8TIuKMiFgZEddHxLcj4plNlUGSpHnVdLLlJsAVPc93BtYFTgDIzN9FxH8B+zVxsoi4P/Be4Hrg7kP2eRFwLFVvyMeAm6mCmxMi4sGZ+fImyqJmzGNS1KxrU6Jem8oyj/q/3yWfh59h+zTdI3ETsF7P892ABM7qWXcdcM+lniiqFnk8VYDw/iH7bE41tLIC2DEzX5iZLwUeQjXUckREPGKpZZEkaV41HUhcAjyq5/n+wE8z8/KedfenSrxcqhfX53oW8Psh+zwbWAd4b2ZeurCyzuF4a/20sWEWSZLmTdOBxIeBB9c5CF8HHgz8R98+DwEuWMpJImJb4G3AuzPzrNXsuhDUfHHAti/07SNJktZQ0zkS7wMeDvwNEMDngLcvbIyI7aiCizeUniAi1gY+CvwCeM0iu29dLy/s35CZV0bE74HNIuJumXlDaZnUHMc/76xNeSOT+nza9J7bpOvfj66XX4M1Gkhk5i3A30bE86un+bu+Xa4CHgpcuoTTvKF+jUdm5o2L7LusXq4csn0lsH6932oDiYg4d8imbRYpgyRJM2ssU2Rn5nVD1l/DEvIjImJnql6If8nMb5a+jiRJakZn7rVRD2l8hGqY4vUjHrYSuDdVj8O1A7Yv1mPxR5m5w5BynQtsP2J5JEmaKUsKJCLi4sJDMzO3XMNj7g5sVf971ZAx1OMi4jiqJMzDqZI6710fd4cejIi4H9WwxmWzlB/h2LKGacv4tG1Umi1L7ZG4C9U8EWuq5JfkJuCDQ7ZtT5U3cTZV8LAQNJwO7Ao8hr5AAnhszz6SJKnAkgKJzNy8oXKMcq4bgWFTYB9FFUh8ODM/0LPpeOBI4EURcfzCXBL1TcUWrvgYOJmVJElaXGdyJEpk5iUR8QrgPcB3I+IT3D5F9maYtClJ0pLMdCABkJnHRsSlwMuBZ1ANx/wYeF1mfniaZZMkqevGEkhExDrAw4BNqaaovpPM/EhT58vMo4CjVrP9c1STY808JwzSMH5mzRjXd6yJG1pJ09B4IBERzwbeAWw0bBeqBM3GAglJkjQdjd5rIyIeA3wAuJJqKCGAzwCvBb5cP/8U1c20JElSxzV9064jqCZ+2iUzj67XfS8z35aZjwEOBZ5CdQtvSZLUcU0PbWwPfKbvHht/DFYy84MR8XSqHorH9h+s7nD8VvNqUrkmg87j925y2pxT1LZ20HSPxPpUwxoLVgEb9O3zXWDnhs8rSZKmoOlA4ipg457nV3L7rbwXLAPWavi8kiRpCpoOJH7EHQOHrwN7R8RuABGxHfDUej9JktRxTedIfAE4JiL+NDOvoLoM9EDgjIhYAdyT6sqNNzd8XjWoTWODJWOBbSq/1CTbdjNG+V1pWx5CmzXdI/F/qSahugYgM38M7E0VYFwDnAY8NjNPbfi8kiRpChrtkcjMW4Bf9a37FvCEJs8jSZLaoekeCUmSNEcMJCRJUrFGhzYi4jaq+2gsJjNz5u88uibaNPlM15OMul7+cVksUc96k1Si6T/mZzE4kNgQ2ApYD/gf4LcNn1eSJE1B08mWew7bFhH3AI4GdqG634YkSeq4ieVI1PffeC5wK/CWSZ1XkiSNz0TzFDLztoj4GtUkVX8/yXO3nePT0+VEP+3K0xkXP2fB7LXraZvGVRvrAhtN4bySJKlhEw0kImIbqt6IiyZ5XkmSNB5NX/75odWc5/7ArlR3/jyiyfNKkqTpaDpH4uBFtv8EeGdmHt/weaUlccx0Pvg5S81rOpDYYsj624DfZOb1DZ9PkiRNUdPzSPy8ydeTJEnt5r02JElSsSX1SETE7qXHZuZZSzm3JEmavqUObZzBaDfpGmStJZ5baowTFXXPKImT/Z+ryZZS85YaSLyJOwcSOwOPAX4GnA1cBdwXeCSwJfAF4DtLPK8kSWqBJQUSmXlU7/OIeDjwauAlwL9m5m092+4CHAa8jSoAkSRJHdd0suU/Al/JzGN7gwio7rORme8GTsdAQpKkmdD0PBI7Accuss/3gBc1fN5WmcWbH5lD0C5db0+TYj1J49d0j0RQ5UGszgMbPqckSZqSpgOJc4D9I+IJgzZGxL7AU4BvNHxeSZI0BU0PbbwWOAv4TEScWf/7V8B9gD2A3YEb6/0kSVLHNT1F9rkR8dfAh4A960dSDXkAXAAckpnnN3netpnFcdlZfE+aP5PK9fH7Mnu6lic2yTbYdI8EmXkOsE1E7AJsDywDVgLn1dskSdKMaDyQWFAHDQYOkiTNMG/aJUmSii31pl1voMqB+NfMXFE/H0Vm5j8u5dySJGn6ljq0cRRVIPEJYEX9fBRJNQumZkTXEpGmxSS8yZpWu/T7MD7T+g753R1uqYHEXvXyF33PJUnSHFjqTbvOXN1zSZI02xpNtoyIDZt8PUmS1G5NX/55ZUR8Fvgw8MX+O4BK865NY+fzMOY7D+9Rd9am79m0TLLtN33556XAgcDngMsj4p0R8eCGzyFJklqi0UAiM7cFdgbeD9wVOAL4XkScGxEvjoh7N3k+SZI0XY1PSJWZ/52ZLwTuR9U78XngwcAxVL0Un46IJzd9XkmSNHljm9kyM2/JzJMzc19gU+BlwA+BfYGTxnVeSZI0OWO710afa4AfAcuB7SZ4Xo3JtJKZxpVANI/JWSXv2eRFdYHtdLLG+gc9IrYBngn8HfCnVLcTv4jqqg5JktRxjQcSEbER8DSqAGJHquDhOuCDwAneSlySpNnRaCAREScDjwP+hOp+Gl8BTgBOycxVTZ5LkiRNX9M9EvsBF1ANXXw0My9v+PVnxijj020e52tz2UrM2vuRpm0e8476zcvvStOBxCMy89sNv6YkSWqppiekMoiQJGmOLKlHIiL+rP7n5Zn5h57ni8rMXyy+lyRJarOlDm1cSpVUuS1wYc/zxWQD5+60eRk705pzbHn2zOP3fR7f8zT1/25Msv6X+sf8I1RBwcq+55IkaQ4sKZDIzINX91ySJM22sd1rQ5IkzT4DCUmSVGypV218qPDQzMxDlnLueTDrSXejJAN1vQ5KEp5MUpO0pqb5u7HUZMuDh6xPqntsDFufgIGEJEkdt9RAYou+53cBjgZ2A94DnAFcBdwX2As4DDgLeNkSzytJklpgqVdt/Lz3eUS8lCqI2L5v2wXAmRHxYeBc4EnAMUs5tyRJmr6mJ4V6LvDJ/gBjQWZeEhGfqvczkFiEY+XWwai6fhO4El3Pn5FG1fbvbtNXbWwO/HaRfX5T7ydJkjqu6UDiGuDRwzZG9V+IRwPXNnxeSZI0BU0HEp8C/ndEfDIi7pCIWT//BPCQeilJkjqu6RyJNwCPBA4A9ouIy4FfAfcBNgXWAv4bOKrh80pzrX8MdVD+wGI5BW0fh+3XtfL2M8dj9nW9jY6q0R6JzLyeKpB4HdWdQP8MeFi9vAR4LbBbvZ8kSeq4xm/lnZk3A28F3hoRdweWASsNHiRJmj2NBxK96uDBAEKSpBnV2Zt2RcTeEXFKRFwVETdFxBUR8aWIeNyAfXeJiFMjYkVE3BgR34+IwyNirWmUXZKkWdF4j0RE7AG8AtgJ2IjBwUpmZvG5I+Id9TkuAz5LddnpxsAOwJ7AqT37Pgk4GVhFdbXICuCJVFN57wocWFoOqa3mJcmry/yMNCsaDSQi4vHAp6muzvgF1dTYtzZ8jkOpgogPA8+tczJ6t9+1598bAMcBfwD2zMzv1utfD5wOHBARB2XmiU2WUZKkedF0j8RRwC3A4zPztIZfm4hYB3gLVZBypyACIDNv6Xl6AFVPxUcWgoh6n1UR8Trgq8ALAAMJSZIKNB1IbAecOI4govbXVIHBMcBtdQ/IdlTDFt/JzG/27f+oevnFAa91FnADsEtErJOZN42pzJIkzaymA4nrqXIQxuVh9XIVcD5VEPFHEXEWcEBm/rpetXW9vLD/hTLz1oi4BHgQ8ABg+VhKvAQlE9Y47to9Tkwkza9Z+M1uOpD4KvCIhl+z1yb18hXAj6luWf49YAvgn4F9qKbp3rPeb1m9XDnk9RbWb7jYiSPi3CGbtlnsWEmSZlXTl3++EtgyIl4X4/lv1kJ5bwX2zcyzM/P6zPwBsB/VVRx7RMQ4gxlJklRrukfijcCPgH8Anh0R32PwbcUzMw8peP2F1zo/My/te8EbIuJLwCFUl55+k9t7HJYx2ML6xW59TmbuMGh93VOx/WLHS5I0i5oOJA7u+ffm9WOQpPqDv6YuqJfD/vD/pl6u17P/jsBWwB2GJiJibaohkVuBiwvKsiTjGheftfH2WRg/XEyb32Ob21Ob602aJ00HElssvsuSfJUqCPnLiLhLZt7Wt30h+fKSenk68H+AxwD/r2/f3YG7AWd5xYYkSWWavvvnz0d9lL4+8Dmqu4m+pHdbROwDPJqqt2Lhcs+TqGa9PCgiduzZd13gzfXT95WURZIkjfmmXWPyQuChwLvqeSTOp+oJeTLVDJbPycyVAJl5XT0T5knAGRFxItXlqftSXRp6EtW02ZIkqUDnbtqVmZdR3VPjvcBfUPVM7EnVU7FrZp7ct/+ngT2oJqDaHziMavbNlwEHpQOtkiQVW3KPRET8oeCwJd20q55w6rD6Mcr+3wDudFfQaTJ+KdPm5D9N1qy1BX8T2m1c7W0WPvcmhjZKane2fgEkSZpTSw4kMrNzwyOSJKkZBgGSJKlYF6/a0BRMazy6f/xwFsYT+83aWH+/WfzMNH9sx8PZIyFJkooZSEiSpGIGEpIkqZg5EhqJ44PjM291O0pOSH+dzHoeSal5aztqJ3skJElSMQMJSZJUzEBCkiQVM5CQJEnFTLaUNFElCYImFZab9UTVUdpG1+qga+3dHglJklTMQEKSJBUzkJAkScXMkVDndW38U5oF4xjHL/kuz+L3v+Q9TTOvwh4JSZJUzEBCkiQVM5CQJEnFzJGYMbM4XjjrunbN+GJsg93SpvbXprJodPZISJKkYgYSkiSpmIGEJEkqZiAhSZKKmWw5Y0xW0rTZBstMK0l1HpJjm2iTXaunSX4P7ZGQJEnFDCQkSVIxAwlJklTMHIkW69qYXJc5rq8Ffu/Gp8vfsy6XfdzskZAkScUMJCRJUjEDCUmSVMwciRYbx5ic47+DjVIvjpHOBz/n7hvH75ztYjh7JCRJUjEDCUmSVMxAQpIkFTOQkCRJxUy2HAMTGmeTn6uaZDJ1t3Stbr1plyRJ6gQDCUmSVMxAQpIkFTNHYgycuETSNPjbo2mwR0KSJBUzkJAkScUMJCRJUjEDCUmSVMxkS2kGdG2ynDZrS8Ji2z/TttSTps8eCUmSVMxAQpIkFTOQkCRJxcyRkGaA49Wzx89UXWGPhCRJKmYgIUmSihlISJKkYuZITEhbrgkfNO7alrK1iePTkjQaeyQkSVIxAwlJklTMQEKSJBUzkJAkScVMtpyQNifvtblskqR2s0dCkiQVM5CQJEnFDCQkSVIxcyQ0MU58pSaZ29Nu0/y+2zYmyx4JSZJUzEBCkiQVM5CQJEnFzJHoMHMOuqfNY7eOaatJfqbzwx4JSZJUzEBCkiQVM5CQJEnFOhlIRMTjI+K0iLgsIm6MiIsj4lMR8Ygh++8SEadGxIp6/+9HxOERsdakyy5J0izpXLJlRLwdOBK4Fvg0cA3wQOBJwP4R8YzM/FjP/k8CTgZWAZ8AVgBPBI4GdgUOnOgbaJDJTGqS7an7xpUwO0rbmLXkb78Po+tUIBER9wVeDvwKeEhmXt2zbS/gdOBNwMfqdRsAxwF/APbMzO/W619f73tARByUmSdO9I1IkjQjuja08edUZf52bxABkJlfA34HbNyz+oD6+YkLQUS97yrgdfXTF4y1xJIkzbCuBRI/BW4GdoqIe/duiIjdgXsAX+lZ/ah6+cUBr3UWcAOwS0SsM4aySpI08zo1tJGZKyLilcC7gB9HxKepciW2BPYFvgw8r+eQrevlhQNe69aIuAR4EPAAYPk4y16if8zRMbvmzNp47ihsP7Nvmp+x7Wt+dSqQAMjMYyLiUuBDwKE9my4CTugb8lhWL1cOebmF9Rsudt6IOHfIpm0WO1aSpFnVtaENIuJI4CTgBKqeiPWBHYCLgY9HxDumVzpJkuZLp3okImJP4O3AKZn5sp5N50XEflRDGEdExPsz82Ju73FYxmAL63+72Lkzc4chZToX2H6E4kuSNHM6FUgAT6iXX+vfkJk3RMR3gP2Ah1L1UFwA7AhsBdxhaCIi1ga2AG6t920dxxzHx7qVlmYceUbj+l7OWk5U236/uja0sXB1xcZDti+sv7lenl4vHzNg392BuwHnZOZNzRRPkqT50rVA4uv18rkRsWnvhoh4LNVMlauAc+rVJ1HNfHlQROzYs++6wJvrp+8ba4klSZphXRvaOIlqnoi/ApZHxCnAVcC2VMMeAbwqM68FyMzrIuLQ+rgzIuJEqimy96W6NPQkqmmzJUlSgU4FEpl5W0Q8DnghcBBVPsTdqIKDU4H3ZOZpfcd8OiL2AF4L7A+sS3Wp6Mvq/ds12CRJUod0KpAAyMxbgGPqx6jHfAN43NgKpYnpWtKUcep0bySl8elS/XeprF3UtRwJSZLUIgYSkiSpmIGEJEkq1rkcCc03xzqbM0ruQhP17WdWpmv5QF1nOy1nj4QkSSpmICFJkooZSEiSpGLmSEhzyjHhyenaXBrzmJ8xj++5qfZjj4QkSSpmICFJkooZSEiSpGIGEpIkqZjJlmqVeUx4mjcmeTZn1r4vto1uskdCkiQVM5CQJEnFDCQkSVIxcyTUKo6RjqbNY+N+hndmnTSnzW2/KV1rL/ZISJKkYgYSkiSpmIGEJEkqZo6E1EFdG0OVmmLbbx97JCRJUjEDCUmSVMxAQpIkFTOQkCRJxUy2bIl5mGRF6qL+5D6/q+1i8uX02SMhSZKKGUhIkqRiBhKSJKmYORIt4Tif1A1+V6U7skdCkiQVM5CQJEnFDCQkSVIxcyR0J14nr6Uwh0Awud8R29v02SMhSZKKGUhIkqRiBhKSJKmYgYQkSSpmsqXuxOQlSUvl78j8sEdCkiQVM5CQJEnFDCQkSVIxcyRUxEmr5lPJuLdtZXzMQ1Ab2CMhSZKKGUhIkqRiBhKSJKmYgYQkSSpmsqWKmHQ3n+bhMzSBsVtmsU12rQ3aIyFJkooZSEiSpGIGEqecMOkAAA6aSURBVJIkqZg5EpqYSeVVdG18UbNnXOP2tu07s06mzx4JSZJUzEBCkiQVM5CQJEnFzJGYcbN4jfVi5vE9az60qW2bm7C4SX5e0/w87JGQJEnFDCQkSVIxAwlJklTMQEKSJBUz2XLGtCkZS5oX40h0a/t3uc3la0siaFvKMW72SEiSpGIGEpIkqZiBhCRJKmaOxIxp05jcYmOobSprm7V5LFqVLn9Gfg+1VPZISJKkYgYSkiSpmIGEJEkqZo5ES3R5jLXUoPfseO2dWSejfT+sJ2k67JGQJEnFDCQkSVIxAwlJklTMQEKSJBUz2bIlRkkUG1dCpklqKtWmJOE2laXr/E3QmrBHQpIkFTOQkCRJxRzaWLrNly9fzg477DDtchTrctklNc/fhPmzfPlygM1Ljg3HwpYmIi4BNgDWrVf9ZIrFmVXb1EvrtnnW7fhYt+Nj3TZvc+C6zNxiTQ80kGhIRJwLkJmG8g2zbsfHuh0f63Z8rNt2MUdCkiQVM5CQJEnFDCQkSVIxAwlJklTMQEKSJBXzqg1JklTMHglJklTMQEKSJBUzkJAkScUMJCRJUjEDCUmSVMxAQpIkFTOQkCRJxQwkligiNouID0XEFRFxU0RcGhHHRMRG0y5b20XEvSLiORFxSkRcFBE3RsTKiDg7Ig6JiIHtMyJ2iYhTI2JFfcz3I+LwiFhr0u+hSyLi7yIi68dzhuzzhIg4o/4cro+Ib0fEMydd1q6IiL3r9ntV/f2/IiK+FBGPG7Cv7XZEEfH4iDgtIi6r6+riiPhURDxiyP7W7RQ5IdUSRMSWwDnAJsBngJ8AOwF7ARcAu2bmtdMrYbtFxPOB9wFXAl8DfgHcB3gKsAw4GTgwexppRDypXr8K+ASwAngisDVwUmYeOMn30BURcX/gB8BawN2BQzPzA337vAg4FriWqm5vBg4ANgP+JTNfPtFCt1xEvAN4BXAZ8AXgGmBjYAfgK5l5ZM++ttsRRcTbgSOp2uGnqer1gcC+wNrAMzLzYz37W7fTlpk+Ch/Al4AEDutb/656/funXcY2P4BHUX3h79K3/r5UQUUC+/es3wC4GrgJ2LFn/bpUAV0CB037fbXtAQTwFeBnwDvrenpO3z6bU/0QXwts3rN+I+Ci+phHTPu9tOUBHFrXyQnAnwzYfteef9tuR6/X+wJ/AK4CNunbtlddVxdbt+16OLRRqO6N2Ae4FPjXvs1vBH4PPD0i1p9w0TojM0/PzM9l5m19668C3l8/3bNn0wFU/+M7MTO/27P/KuB19dMXjK/EnfViqqDtWVTtcpBnA+sA783MSxdWZuZvgLfWT58/xjJ2RkSsA7yFKth9bmbe3L9PZt7S89R2O7o/pxpy/3ZmXt27ITO/BvyOqi4XWLctYCBRbq96edqAP4S/A74B3A14+KQLNiMWfohv7Vn3qHr5xQH7nwXcAOxS/9ALiIhtgbcB787Ms1az6+rq9gt9+8y7v6b64/WfwG31eP4rI+IlQ8bwbbej+ynVkNpOEXHv3g0RsTtwD6retQXWbQsYSJTbul5eOGT7T+vlVhMoy0yJiLWBZ9RPe38ghtZ5Zt4KXEI1hvqAsRawI+p6/CjV/5xfs8juq6vbK6l6MjaLiLs1Wshueli9XAWcD/wXVbB2DHBORJwZEb3/a7bdjigzVwCvpMqV+nFE/HtE/FNEfBI4Dfgy8LyeQ6zbFjCQKLesXq4csn1h/YYTKMuseRuwHXBqZn6pZ711vmbeADwUODgzb1xk31HrdtmQ7fNkk3r5Cqox+N2o/qf8EKo/drsDn+rZ33a7BjLzGKqE67WpclFeBRwI/BI4oW/Iw7ptAQMJtUpEvBg4guoKmKdPuTidFRE7U/VC/EtmfnPa5ZkxC7+btwL7ZubZmXl9Zv4A2I/qKo49hl2qqNWLiCOBk6gSWbcE1qe6EuZi4OP11TJqEQOJcov9D21h/W8nUJaZUF9++G7gx8BedTdnL+t8BPWQxkeountfP+Jho9btsP/5zZOF9nV+b2IqQGbeQHU1F1SXgoPtdmQRsSfwduCzmfmyzLw4M2/IzPOogrTLgSMiYmGowrptAQOJchfUy2E5EH9RL4flUKhHRBxONYfBD6mCiKsG7Da0zus/nltQ/S/x4nGVsyPuTlVH2wKreiahSqorigCOq9cdUz9fXd3ej+p/hZfVfyjn3UJdDfvj9Jt6uV7f/rbbxT2hXn6tf0Pd9r5D9XfrofVq67YFDCTKLTT0ffpnYIyIewC7UmUMf2vSBeuaiHglcDTwPaog4uohu55eLx8zYNvuVFfJnJOZNzVfyk65CfjgkMf59T5n188Xhj1WV7eP7dtn3n2VKjfiL4fMvrpdvbykXtpuR7dwdcXGQ7YvrF+45Na6bYNpT2TR5QdOSNVEHb6+rqvvAvdcZN8NgF/j5DNLqe+jGDwh1RY4IdWa1ONn6jp5ad/6fYDbqHolltXrbLej1+tT6/q4Cti0b9tj67q9EbiXddueh1NkL8GAKbKXAztTzTFxIbBLOkX2UPU9HE6gmsnuWAaPv1+amSf0HPNkqkSsVcCJVNPh7ks9HS7w1LRRDxURR1ENbwyaIvsw4D04RfaiImIzqu/+/al6KM6nCsaezO1/vE7u2d92O4K6h+dLwF9RTT51ClVQsS3VsEcAh2fmu3uOsW6nbdqRTNcfVD8kx1PdL+Jm4OdU15NvNO2ytf3B7f87Xt3jjAHH7QqcSvW/vhup7iHxUmCtab+ntj8Y0iPRs/2JwJlUP+K/B/4beOa0y93GB1U3+7H1d/5mqntCnALsNGR/2+1o9XpX4HCqYeHrqHIcrqaar2Mf67Z9D3skJElSMZMtJUlSMQMJSZJUzEBCkiQVM5CQJEnFDCQkSVIxAwlJklTMQEKSJBUzkJAkScUMJCRJUjEDCUmSVMxAQpIkFTOQkDQVEXF2RNzawOtcFhEXrcH+D4yIjIgPLL63pMUYSEhzJCI+Xv8R/fsR9j2t3ne/SZRNUjcZSEjz5bh6+ZzV7RQRmwN/BVwJfG5MZflb4EFjem1JE2IgIc2RzDwDuBB4aERsv5pdDwECOD4zlzz8MKQsv8jMC8bx2pImx0BCmj8LvRKHDtoYEWsBzwIS+EC9btOIeGNEnBMRV0XEzRFxeT1Uss2A1/hjHkJEbB0Rn4qIX0fEbRHxyHqfO+VIRMQ6EXFYRHwhIn4eETdFxIqI+HJEPHp1byoiNoyIf4uIKyJiVUT8KCJeGBExasVExPoR8ZqI+J+I+H1EXF+/578ZsG9ExLMi4pv1e1sVEb+MiC9GxAGjnlPqOgMJaf58GLgZeFpE3G3A9scCmwJfycxL6nV7AUcCK4CTgWOA7wBPBb4TEdsNOddW9X6bAR+jCmJ+t5qybVy/9t2BLwPvAj4L7AB8ISIOHnLcOsDpVMMx/1Gf517Ae+vXW1REbAR8A3gLcAvwIaq6ug9wYkQc1XfI2+t9NgY+CRwNfBW4P2AgofmRmT58+JizB/AJqh6Hgwds+0y97YCedfcB7j5g34cCvwc+17f+gfVrJPCmIWU4G7i1b926wKYD9t0QWA78Glinb9tl9XnOBP6kZ/29gUvqbbsMKNsH+l7nY/X6l/WtX48qqLkNeHDP+pXAL4D1BpT33tP+jH34mNTDHglpPv17vbxD0mVE3A94HHA1VUABQGb+KjOv73+RzDyf6g/43vWQSL8rgDePWqjMXJWZlw9Y/1vgeKrgYIchh78qM2/uOeYaqt4FqIZqhoqITYCnAd/KzHf1nftG4FVUOSNP6zv0ZuAPA8p7zerOJ82StaddAElTcTrwM2DXiNg2M5fX659F9btwQmbe0ntAROwLPI/qD/m9uPPvxz2pegx6fa/3j/soIuLBwCuARwJ/SjVs0WvTAYfdBHxrwPoz6uVDFzntTlRDvTFgCIOeMmzbs+7jwAuAH0XEJ4GzgG9m5nWLnEuaKQYS0hzKzIUJmf6JqlfiiDop8RCq7v3jevePiCOAf6bKkfgK8HPgxnrfpwAP5s5/8AGuWpNyRcSu9evfhSrf4DNUORW3AdsDTxxynl9nZq7m/MsWOfW96uXO9WOYu/f8+8XARcDBwGvqx60R8Xmq4ZGLFzmnNBMMJKT5dTzwJuAZEfFqYDfgAcDpmfnHmSIj4q7AG6mGKbbPzF/1vkhE7Laacwz64746r6fKk9gtM8/uO8/rqQKJQTaOiBgQTNy3Xq5c5LwL29+ZmUeOUtCsLot9F/CuemhkN6q5MZ4CbBsR2/X36kizyBwJaU7VAcFnqfIOnszt+RL/3rfrfYB7AGcPCCI2YPFhgzXxQODq/iCitsdqjlsHePiA9XvWy/MXOe+3qYKe1QVFQ2Xm1Zl5cmbuTzXEsRXwlyWvJXWNgYQ03xaGMI4A9gOuAU7p2+dKqhyEh0XE+gsrI+JPgGOBjRosz6VUvQt3mPEyIp4H7L3IsW+ry7RwzL2B19ZPj1/dgZl5JXAi8PCIePWgxNF6bow/r/+9XkQ8YsA+d+X2+rhhkfJKM8GhDWm+nUb1x3un+vl7+5MjM/MPEXEs8HLgBxHxWaoegEdR5R6cyep7C9bE0VQBwzl1AuN1ddkeQTV/xf5DjruMqtfkhz3lO4BqaOM9mXnOCOd+AVWPyFuBgyPibKrk0ftR9S7sCBxIlR+yfl3GnwLnUl0Gui6wD7AN8J+Z+dM1e+tSN9kjIc2xOqeg9y6Yxw3Z9dVUE1LdRHXlxpOphgMeRvVHvKnyfB54EvAT4CDg2VT/s98T+OJqDr2JKrD5KlWewnOB3wCHAYePeO6VVEMbL6FKKj2gPnZPqhyKw6mudoEqwHkVcDGwa33M04DfUtXPQaOcU5oFMTjRWZIkaXH2SEiSpGIGEpIkqZiBhCRJKmYgIUmSihlISJKkYgYSkiSpmIGEJEkqZiAhSZKKGUhIkqRiBhKSJKmYgYQkSSpmICFJkooZSEiSpGIGEpIkqZiBhCRJKmYgIUmSihlISJKkYv8flsc8YS7eaYEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.interface import crossover\n",
    "from pymoo.factory import get_crossover\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def example_parents(n_matings, n_var):\n",
    "    a = np.arange(n_var)[None, :].repeat(n_matings, axis=0)\n",
    "    b = a + n_var\n",
    "    return a, b\n",
    "    \n",
    "\n",
    "def show(M):\n",
    "    plt.figure(figsize=(4,4))\n",
    "    plt.imshow(M, cmap='Greys',  interpolation='nearest')\n",
    "    plt.xlabel(\"Variables\")\n",
    "    plt.ylabel(\"Individuals\")\n",
    "    plt.show()\n",
    "\n",
    "n_matings, n_var = 100, 100\n",
    "a,b = example_parents(n_matings,n_var)\n",
    "\n",
    "print(\"One Point Crossover\")\n",
    "off = crossover(get_crossover(\"bin_one_point\"), a, b)\n",
    "show((off[:n_matings] != a[0]))\n",
    "\n",
    "print(\"Two Point Crossover\")\n",
    "off = crossover(get_crossover(\"bin_two_point\"), a, b)\n",
    "show((off[:n_matings] != a[0]))\n",
    "\n",
    "print(\"K Point Crossover (k=4)\")\n",
    "off = crossover(get_crossover(\"bin_k_point\", n_points=4), a, b)\n",
    "show((off[:n_matings] != a[0]))"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_uniform:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Uniform Crossover ('real_ux', 'bin_ux', 'int_ux')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The uniform crossover takes with a probability of 0.5 the values from each parent. \n",
    "In contrast to a point crossover not a sequence of variables is taken, but random indices."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "off = crossover(get_crossover(\"bin_ux\"), a, b)\n",
    "show((off[:n_matings] != a[0]))"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_half_uniform:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Half Uniform Crossover ('bin_hux', 'int_hux')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The half uniform crossover will first find out what indices are different in first and the second parent. Then, it will take half of the difference to be selected from the other parent."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Here, a and b are different for indices:  [ 5 15 25 35 45 55 65 75 85 95]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Difference in bits (a to b):  1000\n",
      "Difference in bits (a to off):  460\n",
      "Crossover Rate:  0.46\n"
     ]
    }
   ],
   "source": [
    "_a = np.full((100,100), False)\n",
    "_b = np.copy(_a)\n",
    "_b[:, np.linspace(5, 95, 10).astype(np.int)] = True\n",
    "\n",
    "print(\"Here, a and b are different for indices: \", np.where(_a[0] != _b[0])[0])\n",
    "\n",
    "off = crossover(get_crossover(\"bin_hux\"), _a, _b)\n",
    "show((off[:100] != _a[0]))\n",
    "\n",
    "diff_a_to_b = (_a != _b).sum()\n",
    "diff_a_to_off = (_a != off[:100]).sum()\n",
    "\n",
    "print(\"Difference in bits (a to b): \", diff_a_to_b)\n",
    "print(\"Difference in bits (a to off): \", diff_a_to_off)\n",
    "\n",
    "print(\"Crossover Rate: \", diff_a_to_off / diff_a_to_b)\n",
    "\n"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_exponential:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exponential Crossover ('real_exp', 'bin_exp', 'int_exp')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The exponential crossover is mostly a one point crossover, but occasionally it can be a two point crossover. \n",
    "First, randomly a starting index is chosen. Then, we add the next variable to be mutated with a specific probability. If we reach the last variable, we continue with the first (wrap around)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 288x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 264,
       "width": 265
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "off = crossover(get_crossover(\"real_exp\", prob=0.95), a, b)\n",
    "show((off[:n_matings] != a[0]))"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. _nb_crossover_differential:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Differential Crossover ('real_de')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The differential crossover is used in the [differential evolution algorithm](../algorithms/differential_evolution.ipynb). It adds the difference of two individuals to another one.\n",
    "\n",
    "It can be initiated by"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "crossover = get_crossover(\"real_de\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the following the different creating of donor vectors is shown. The difference between $x_{\\pi_2} - x_{\\pi_3}$ is added with different weights $F \\in (0, 1)$ to $x_{\\pi_1}$. The resulting donor solution can be used for further evolutionary recombinations (for example DE uses it for another crossover)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 252,
       "width": 380
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from pymoo.factory import get_crossover\n",
    "from pymoo.interface import crossover\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "c = np.array([[0.8, 0.2]])\n",
    "a = np.array([[0.4, 0.4]])\n",
    "b = np.array([[0.6, 0.5]])\n",
    "\n",
    "X = crossover(get_crossover(\"real_de\", weight=0.0, dither='vector'),\n",
    "              a.repeat(100, axis=0), b.repeat(100, axis=0), c.repeat(100, axis=0))\n",
    "\n",
    "plt.scatter(X[:, 0], X[:, 1], s=20,facecolors='none', edgecolors='r', label=\"v\")\n",
    "plt.scatter(a[:, 0], a[:, 1], label=\"$x_{\\pi_1}$\", marker=\"X\")\n",
    "plt.scatter(b[:, 0], b[:, 1], label=\"$x_{\\pi_2}$\", marker=\"X\")\n",
    "plt.scatter(c[:, 0], c[:, 1], label=\"$x_{\\pi_3}$\", marker=\"X\")\n",
    "\n",
    "plt.xlim(0, 1)\n",
    "plt.ylim(0, 1)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### API"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. autofunction:: pymoo.factory.get_crossover\n",
    "    :noindex:\n",
    "\n",
    ".. autofunction:: pymoo.model.crossover.Crossover\n",
    "    :noindex:"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
